雖說 Shell Script 只是個腳本語言,但是如果功能越加越多,對於 shell script 的可讀性可能就會越來越低,因此我在學習撰寫 shell script 中發現,其實 shell script 也是可以寫 function 的,雖然寫起來感覺跟C++或Java那種不太一樣,但對於提升 shell script 的可讀性來說,是大大的提升許多。
雖說 Shell Script 只是個腳本語言,但是如果功能越加越多,對於 shell script 的可讀性可能就會越來越低,因此我在學習撰寫 shell script 中發現,其實 shell script 也是可以寫 function 的,雖然寫起來感覺跟C++或Java那種不太一樣,但對於提升 shell script 的可讀性來說,是大大的提升許多。唯一要注意的是,因為 shell script 不需要經過編譯器(compiler)編譯,所以要呼叫 function 之前,一定要先定義該 function ,不能像 Java 或其他程式語言一樣,把 function 寫在後面,一定要寫在呼叫該 function 之前。
Shell script function 的定義方式如下:
function_name(){
# function 內容
}
…
…
# 呼叫 function _name
function_name
夠簡單了吧!!
那麼就讓我們把昨天的例子,改用函示寫過,看看是不是真的提高可讀性了!
#!/bin/bash
TriggerAutoBuildMyProject(){
#用 wget 去開啟網頁,觸發自動建置,不是真的需要網頁的內容
wget http://192.168.0.2:8080/jenkins/job/MyProject/build?token=TriggerBuild
# 因為使用 wget 去抓網頁,會留下不需要的檔案,所以刪掉他
rm build?token*
}
# workspace variables
MyProjectLog=/home/pajace_chen/Perforce_Check/MyProjectUpdateLog.log
# Perforce workspace
export MyProjectWorkspace=MyProject
# Perfoce 指令
P4COMMAND=/usr/local/bin/p4
# 要登入 Perfroce 所需的環境變數
export P4CLIENT=$MyProjectWorkspace
export P4PASSWD=1234567890
export P4USER=pajace2001
export P4PORT=192.168.0.1:1666
# 這一步驟是要登入 perforce
echo $P4PASSWD | $P4COMMAND login >&2
# 這一步驟是要將 p4 sync 的結果 assign 給OUTPUT 這個變數
OUTPUT=$($P4COMMAND sync 2>&1)
# 指定 log file 檔案名稱
LOG_FILE=$ MyProjectLog
# 如果執行 p4 sync 的結果有包含 MyProject 就去觸發自動建置功能
if [[ "$OUTPUT" =~ //MyProject* ]]
then
# 用 echo 記錄一些相關資料
echo "`date`: My Project 的程式碼有更動." >> $LOG_FILE
echo "`date`: 觸發自動建置功能" >> $LOG_FILE
# 將執行 p4 sync 的結果寫到 log 檔案中
echo "$OUTPUT" >> $LOG_FILE
# 這行應該不用註解吧 ^_^”,(只有修改這裡)
TriggerAutoBuildMyProject
else
# 沒有程式碼更動也寫一下 log 好做偵錯時使用
echo "`date`: MyProject 中沒有程式碼更動. Output: $OUTPUT" >> $LOG_FILE
fi
$P4COMMAND logout
有沒有!我只有做一個動作,就是把觸發自動建置的那兩行拉出來成一個 function ,是不是是覺得那段的可讀性提高了呢?明天再繼續囉~~你會發現,可讀性是越來越高!
鐵人賽文章分享
上一篇 ShellScript真實案例練習之實做
下一篇 提高可讀性之函示寫法(二)